﻿using System.Data.Entity.ModelConfiguration;

namespace Delphi.Mimir.Data.Entities.Final.Mappings {
    public class FxRateMap : EntityTypeConfiguration<FxRate> {
        public FxRateMap() {

            /******************************************************************
            /* Table
            /*****************************************************************/
            ToTable("fin.eod_fx_rates");

            /******************************************************************
            /* Primary Key
            /*****************************************************************/
            HasKey(a => a.FxRateId);

            /******************************************************************
            /* Index
            /*****************************************************************/
            // none

            /******************************************************************
            /* Relationships
            /*****************************************************************/
            // 1..n Symbol
            HasOptional<Symbol>(a => a.Symbol_1)
                .WithMany()
                .HasForeignKey(a => a.SymbolId_1)
                .WillCascadeOnDelete(false);

            // 1..n Symbol
            HasOptional<Symbol>(a => a.Symbol_2)
                .WithMany()
                .HasForeignKey(a => a.SymbolId_2)
                .WillCascadeOnDelete(false);

            // 1..n Currency
            HasRequired<Currency>(a => a.Currency)
                .WithMany()
                .HasForeignKey(a => a.CurrencyId);

            /******************************************************************
            /* Properties
            /*****************************************************************/
            Property(a => a.FxRateId)
                .IsRequired()
                .HasColumnName("fxr_id");

            Property(a => a.CurrencyId)
                .IsRequired()
                .HasColumnName("fxr_cur_id");

            Property(a => a.SymbolId_1)
                .IsOptional()
                .HasColumnName("fxr_sym_1_id");

            Property(a => a.SymbolId_2)
                .IsOptional()
                .HasColumnName("fxr_sym_2_id");

            Property(a => a.Factor)
                .IsRequired()
                .HasColumnName("fxr_factor");
        }
    }
}
